// Bachelor of Software Engineering 
// Media Design School 
// Auckland
// New Zealand
// 
// (c) 2005 - 2014 Media Design School 
// 
// File Name : Move.h
// Description : Move header
// Author : Serge Radinovich
// Mail : srad015@hotmail.com

#pragma once

#include "CardPileGroup.h"

class Move
{

public:
	Move(std::list<Card*>* _pPileMovedTo, std::list<Card*>* _pCardsMoved, const int _iCardCount, std::list<Card*>* _pPileMovedFrom, CardPileGroup* _pPileGroupMovedFrom, bool _bFlip = true);
	~Move(void);
	
	//Pointer to list of cards move made to
	std::list<Card*>* m_pPileMovedTo;

	//Pointer to list of cards moved
	std::list<Card*>* m_pCardsMoved;

	//Pointer to list card moved from
	std::list<Card*>* m_pPileMovedFrom;

	//Pointer to pilegroup taken from
	CardPileGroup* m_pPileGroupMovedFrom;

	//Whether or not to flip top of tableau pile card being returned to on undo move
	bool m_bFlip;
};


//Moves specific to Stock pile
class StockMove : public Move
{
public:
	StockMove(bool _bStockEmpty, bool _bWasteEmpty,
			  std::list<Card*>* _pPileMovedTo, std::list<Card*>* _pCardsMoved, const int _iCardCount, std::list<Card*>* _pPileMovedFrom, CardPileGroup* _pPileGroupMovedFrom, bool _bFlip = true);
	~StockMove(void);
	
	//Deck states when move was made
	bool m_bStockEmpty;
	bool m_bWasteEmpty;
	int m_iCardCount;
};